home *** CD-ROM | disk | FTP | other *** search
RISC OS BBC BASIC V Source | 1991-05-10 | 16.8 KB | 578 lines |
- >PatchAll
- $;" at line ";
- "OS_Module",18,"WindowManager"
- ,,,WimpMod
- "OS_Module",18,"Filer"
- ,,,FilerMod
- code% &4000
- pass%=4
- O%=code%
- [OPT pass%
- EQUD 0
- EQUD init
- EQUD final
- EQUD 0
- EQUD title
- EQUD help
- EQUD 0
- EQUD 0
- EQUD 0
- EQUD 0
- EQUD 0
- .title
- EQUS "PatchAll"
- EQUB 0
- .help
- AEQUS "PatchAll"+
- 9+"1.41 (10 May 1995) by Matthew Godbolt"
- EQUB 0
- ALIGN
- .Monga
- JEQUS "This module is by Matthew Godbolt (M.R.Godbolt@exeter.ac.uk). "
- KEQUS "It is FREEWARE and should have come with a !Help file describing"
- !-EQUS " what this means. :-)":EQUB 0:ALIGN
- " .init
- STMFD R13!,{R0,R1,R14}
- BL DoOptions
- ADR R1,FontName
- LDR R2,FontXSize
- LDR R3,FontYSize
- MOV R4,#0
- MOV R5,#0
- SWI "XFont_FindFont"
- +)ADDVS R13,R13,#4:LDMVSFD R13!,{R1,PC}
- STR R0,myfonthandle
- SWI "OS_IntOff"
- MOV R1,#8
- LDR R0,[R1]
- STR R0,oldbranch
- ADR R1,myjump-8
- BIC R0,R0,#&FF000000
- SUB R0,R0,R1,ASR #2
- BIC R0,R0,#&FF000000
- R R0,R0,#&EA000000
- STR R0,myjump
- ADR R0,myswihand-&10
- MOV R0,R0,LSR #2
- R R0,R0,#&EA000000
- MOV R1,#8
- ;!STR R0,[R1]:STR R0,mycopy
- SWI "OS_IntOn"
- LDMFD R13!,{R0,R1,PC}
- .myfonthandle EQUD0
- .myjump B &1F033C0
- .mycopy EQUD 0
- AH.FontName EQUS "Trinity.Corpus.Bogus.Font.Italic.I.Dunno.!"+
- 0:ALIGN
- .FontXSize EQUD 0
- .FontYSize EQUD 0
- .final
- STMFD R13!,{R0,R1,R14}
- LDR R0,oldbranch
- MOV R1,#8
- H0LDR R2,mycopy:LDR R3,[R1]:CMP R3,R2:BNE Cant
- STR R0,[R1]
- LDR R0,myfonthandle
- SWI "XFont_LoseFont"
- L;MOV R0,#7:LDR R2,SpriteAt:MOVS R2,R2:SWINE "XOS_Module"
- LDMFD R13!,{R0,R1,PC}^
- N".oldbranch EQUD &EA6051CD
- O@.Cant LDMFD R13!,{R0,R1,R14}:ADR R0,errswi:
- RS PC,R14,#1<<28
- P8.errswi EQUS "!@#$Can't detach SWI handler"+
- 0:ALIGN
- .myswihand
- STMFD R13!,{R10,R14}
- BIC R14,R14,#&FC000003
- R10,R14,#&03800000:CMP R10,#&03800000:LDMNEFD R13!,{R10,R14}:BNE myjump
- LDR R14,[R14,#-4]
- BIC R14,R14,#&FF000000
- BIC R14,R14,#&20000
- CMP R14,#0:BEQ WriteC
- Z&LDR R10,ospl:CMP R14,R10:BEQ Write
- [1LDR R10,openwindow:CMP R14,R10:BEQ RedrawRoot
- \/LDR R10,deletewindow:CMP R14,R10:BEQ Delwin
- ])LDR R10,ploticon:CMP R14,R10:BEQ Plot
- ^)LDR R10,ClrBack:CMP R14,R10:BEQ Clear
- _!LDMFD R13!,{R10,R14}:B myjump
- .openwindow EQUD &400C5
- .deletewindow EQUD &400C3
- .ploticon EQUD &400E2
- .ClrBack EQUD 256+16
- .ospl EQUD &45
- .Word EQUD &E59AE05C
- .Wind EQUS "Wind"
- j&.Bongo2 SWI "XWimp_GetPointerInfo"
- .Delwin
- LDMFD R13!,{R10,R14}
- STMFD R13!,{R0-R12,R14}
- nKBIC R14,R14,#&FC000003:LDR R14,[R14,#16]:LDR R11,BilgePump2:CMP R14,R11
- BNE Normal
- B BonjourMeLad
- .RedrawRoot
- LDMFD R13!,{R10,R14}
- STMFD R13!,{R0-R12,R14}
- CMP R10,#&40000:BGT Normal
- uGBIC R14,R14,#&FC000003:LDR R10,[R14,#12]:LDR R11,Bongo2:CMP R11,R10
- BNE Normal
- .BonjourMeLad
- xDLDR R0,[R1]:BIC R0,R0,#3:ADD R0,R0,#&90:LDR R0,[R0]:ADD R0,R0,#4
- adr(7,Moglin):MOV R8,R7
- .PleiLoop
- {DLDRB R1,[R0],#1:CMP R1,#
- Q R8,R7:STRB R1,[R7],#1:CMP R1,#32
- BGE PleiLoop
- MOV R1,#0:STRB R1,[R8],#1
- LDR R0,[R12,#8]
- .SearchLoop
- <TEQ R0,#&40000001:BEQ Normal:LDR R2,[R0,#4]:ADD R2,R2,#4
- adr(7,Moglin)
- .CheckLp
- CLDRB R3,[R7],#1:LDRB R4,[R2],#1:CMP R3,#0:CMPEQ R4,#0:BEQ Match
- CMP R3,R4:BEQ CheckLp
- LDR R0,[R0]:B SearchLoop
- .Match
- MOV R4,R0:LDR R3,[R4,#32]
- LDR R2,[R4,#&18]
- .FudgeLoop
- MOV R9,R8
- ..Lop LDRB R10,[R2],#1:MOVS R10,R10:BNE Lop
- .Speedleloop
- HLDRB R10,[R2],#1:LDRB R11,[R9],#1:CMP R10,#0:CMPEQ R11,#0:BEQ Match2
- CMP R10,R11:BEQ Speedleloop
- CMP R10,#0:SUBEQ R2,R2,#1
- 2SUBS R3,R3,#1:BNE FudgeLoop:SWI 256+7:B Normal
- .Match2
- !ADD R5,R0,#&2C:LDR R0,[R0,#8]
- Filer_bl(&1EB8)
- $ADD R1,R12,#&44:LDMIA R1,{R1-R4}
- SWI "XWimp_ForceRedraw"
- LDMFD R13!,{R0-R12,R14}
- B myjump
- .BilgePump2 EQUD &E92D40BE
- .TexOnFlag EQUD 0
- .FontOnFlag EQUD 0
- .DirOnFlag EQUD 0
- .Clear
- LDMFD R13!,{R10,R14}
- STMFD R13!,{R0-R12,R14}
- CMP R0,#1:BNE Normal
- *LDR R0,TexOnFlag:MOVS R0,R0:BEQ Normal
- 1LDR R0,[R10]:LDR R1,Wind:CMP R0,R1:BNE Normal
- (LDR R0,[R10,#4]:CMN R0,#1:BEQ Normal
- (BIC R14,R14,#&FC000003:LDR R14,[R14]
- %LDR R0,Word:CMP R0,R14:BNE Normal
- :MOV R0,#&87:SWI "XOS_Byte":BVS Normal:LDRB R0,ModeLast
- CMP R0,R2:BLNE CalcSize
- =MVN R0,#0:MOV R1,#9:SWI "XOS_ReadModeVariable":BVS Normal
- MVN R1,#0
- CMP R2,#0:ADREQ R1,Mode0
- CMP R2,#2:ADREQ R1,Mode12
- CMP R2,#3:ADREQ R1,Mode15
- CMN R1,#1:BEQ Normal
- LDR R14,ModeLoad
- CMP R14,R2:BEQ DontLoad
- &STR R2,ModeLoad:STMFD R13!,{R0-R7}
- ;MOV R0,#7:LDR R2,SpriteAt:MOVS R2,R2:SWINE "XOS_Module"
- MOV R2,#0:STR R2,SpriteAt
- MOV R0,#5:LDR R1,[R13,#4]
- CMOV R2,#0:MOV R3,#0:SWI "XOS_File":ADDVS R13,R13,#32:BVS Normal
- HADD R3,R4,#4:MOV R0,#6:SWI "XOS_Module":ADDVS R13,R13,#32:BVS Normal
- "STR R2,SpriteAt:STR R4,[R2],#4
- =LDR R1,[R13,#4]:MOV R0,#&FF:MOV R3,#0:MOV R4,#0:MOV R5,#0
- %SWI "XOS_File":LDMFD R13!,{R0-R7}
- BLVC CalcSize:BVC DontLoad
- .MOV R0,#7:LDR R2,SpriteAt:SWI "XOS_Module"
- MOV R2,#0:STR R2,SpriteAt
- B Normal
- .DontLoad
- )LDR R2,SpriteAt:MOVS R2,R2:BEQ Normal
- LDR R2,[R13,#8]
- ?ADD R10,R10,#&48 ; should now point to WindowInfo Block ...
- 1LDR R0,[R10,#0]:LDR R6,[R10,#16]:SUB R6,R0,R6
- 2LDR R0,[R10,#12]:LDR R7,[R10,#20]:SUB R7,R0,R7
- %LDR R10,XSprSize:LDR R11,YSprSize
- 2.shpondle SUB R6,R6,R10:CMP R6,R2:BGE shpondle
- 2.shpondle ADD R7,R7,R11:CMP R7,R5:BLT shpondle
- SUB R7,R7,R11
- MOV R8,R4:SUB R9,R3,R11
- LDR R1,SpriteAt
- ADD R2,R1,#16
- MOV R0,#&22:
- R R0,R0,#&200
- !MOV R3,R6:MOV R4,R7:MOV R5,#0
- .Loop
- STMFD R13!,{R0-R5}
- SWI "XOS_SpriteOp"
- LDMFD R13!,{R0-R5}
- BVS Normal
- $ADD R3,R3,R10:CMP R3,R8:BLT Loop
- .MOV R3,R6:SUB R4,R4,R11:CMP R4,R9:BGE Loop
- LDMFD R13!,{R0-R12,R14}
- MOVS PC,R14
- .Normal
- LDMFD R13!,{R0-R12,R14}
- MOV R0,R0
- B myjump
- %.Backg EQUS "background"+
- 0:ALIGN
- .ModeLoad EQUD -1
- .SpriteAt EQUD 0
- .ModeLast EQUD
- ..Mode0 EQUS "WindowDrop:Sprites0"+
- 0:ALIGN
- 0.Mode12 EQUS "WindowDrop:Sprites12"+
- 0:ALIGN
- 0.Mode15 EQUS "WindowDrop:Sprites15"+
- 0:ALIGN
- .XSprSize EQUD 0
- .YSprSize EQUD 0
- .CalcSize
- "STMFD R13!,{R0-R7,R10,R11,R14}
- *LDR R1,SpriteAt:MOVS R1,R1:BEQ Flimsey
- ADD R2,R1,#16
- 0MOV R0,#40:
- R R0,R0,#&200:SWI "XOS_SpriteOp"
- DMVN R0,#0:MOV R1,#4:SWI "XOS_ReadModeVariable":MOV R10,R3,LSL R2
- DMVN R0,#0:MOV R1,#5:SWI "XOS_ReadModeVariable":MOV R11,R4,LSL R2
- %STR R10,XSprSize:STR R11,YSprSize
- .Flimsey
- "LDMFD R13!,{R0-R7,R10,R11,PC}^
- .GreyFlag EQUD 0
- .MaybeClear
- )LDR R1,GreyFlag:MOVS R1,R1:BEQ Normal
- 'LDR R1,[R13,#56] ; r1 from previous
- R2,R1,#3:CMP R2,#3:BNE Normal
- TST R1,#256:BEQ Normal
- LDMFD R13!,{R0-R12,R14}
- MOVS PC,R14
- .Word2 LDR R14,[R12,#84]
- .Word3 EQUD &0A00000C
- .Counter EQUD 0
- .WriteMen EQUD &70D0121
- 7; hacks at WindowManager+&76E0 called from WM+&7568
- .Write
- LDMFD R13!,{R10,R14}
- STMFD R13!,{R0-R12,R14}
- +LDR R4,FontOnFlag:MOVS R4,R4:BEQ Normal
- ,BIC R14,R14,#&FC000003:LDR R11,[R14,#16]
- &LDR R4,Word2:CMP R4,R11:BNE Normal
- CMP R0,#103:BEQ MaybeClear
- LDR R14,[R13,#64]
- ,BIC R14,R14,#&FC000003:LDR R14,[R14,#16]
- &LDR R4,Word3:CMP R4,R14:BNE Normal
- CMP R0,#4:BNE Normal
- 7LDR R2,[R13,#60]:LDR R14,[R13,#56]:
- R9,R14,#&F<<12
- CMP R9,#12<<12:BGE Normal
- HLDR R9,WriteMen:CMP R14,R9:
- RNE R9,R9,#1<<21:CMPNE R14,R9:BEQ Normal
- STMFD R13!,{R0-R2,R14}
- ILDR R0,[R12,#128]:BIC R0,R0,#3:ADD R1,R0,#64:SWI "OS_ValidateAddress"
- BCS Bob
- -LDR R2,[R0]:LDR R1,Wind:CMP R2,R1:BNE Bob
- $LDR R2,[R0,#4]:CMN R2,#1:BNE Bob
- ; ok so we have a menu here!
- (LDR R14,[R13,#60+24] \ The IconFlags
- @TST R14,#&100:
- Q R14,#&C:MOVNE R14,#&1000000:STR R14,Counter
- BLDR R2,[R13,#16+60] \ Aha! the key, the secret! The icon data!
- STMFD R13!,{R0-R1,R3-R9}
- +LDR R8,[R0,#(&48+8)]:LDR R9,[R0,#(&48)]
- SUB R8,R8,R9:SUB R8,R8,#64
- *STMFD R13!,{R1,R2}:MOV R1,R8:MOV R2,#0
- SWI "Font_Converttopoints"
- MOV R8,R1:LDMFD R13!,{R1,R2}
- +LDR R0,myfonthandle:SWI "XFont_SetFont"
- MOV R0,R2:.Fleep
- <LDR R14,Counter:SUBS R14,R14,#1:STR R14,Counter:BEQ NoHK
- 8LDRB R3,[R0],#1:MOVS R3,R3:CMPNE R3,#13:CMPNE R3,#10
- !BEQ NoHK:CMP R3,#32:BNE Fleep
- 8LDRB R3,[R0]:CMP R3,#
- ":CMPNE R3,#
- "^":BEQ FoundHK
- CMP R3,#32:BNE NotSpace
- !!LDRB R14,[R0,#-1]:CMP R14,#32
- "2LDR R14,Counter:ADD R14,R14,#1:STR R14,Counter
- BNE NotSpace
- .Skandl
- LDRB R3,[R0],#1
- &<LDR R14,Counter:SUBS R14,R14,#1:STR R14,Counter:BEQ NoHK
- '>CMP R3,#32:BEQ Skandl:MOVS R3,R3:CMPNE R3,#13:CMPNE R3,#10
- (#BEQ NoHK:SUB R0,R0,#1:B FoundHK
- .NotSpace
- *ACMP R3,#
- "F":BNE Fleep:LDRB R3,[R0,#1]:CMP R3,#
- "0":BLT Fleep
- CMP R3,#
- "9":BGT Fleep
- .FoundHK
- - LDRB R3,[R0,#-1]!:CMP R3,#32
- BEQ FoundHK:ADD R0,R0,#1
- /NADR R4,HotKey:.Floopy LDRB R3,[R2],#1:STRB R3,[R4],#1:CMP R2,R0:BLT Floopy
- MOV R3,#0:STRB R3,[R4]
- 1?STMFD R13!,{R1-R4}:ADR R1,HotKey:MOV R2,#&8000000:MOV R3,R2
- 2;MVN R4,#0:MOV R5,#&FF:SWI "XFont_StringWidth":MOV R6,R2
- LDMFD R13!,{R1-R4}
- .Floopy2 LDRB R3,[R2],#1
- CMP R3,#32:BEQ Floopy2
- SUB R2,R2,#1
- 7DSTMFD R13!,{R1-R4}:MOV R1,R2:MOV R2,#&800000:MOV R3,R2:MVN R4,#0
- 8!LDR R5,Counter:LDR R5,Counter
- 95SWI "XFont_StringWidth":ADD R6,R6,R2:SUB R8,R8,R6
- LDMFD R13!,{R1-R4}
- MOV R3,#9:STRB R3,[R4],#1
- <$STRB R8,[R4],#1:MOV R8,R8,LSR #8
- =4STRB R8,[R4],#1:MOV R8,R8,LSR #8:STRB R8,[R4],#1
- LDR R14,Counter
- ?8.Floopy3 LDRB R3,[R2],#1:SUBS R14,R14,#1:MOVMI R3,#0
- STRB R3,[R4],#1
- CMP R3,#&20:BGT Floopy3
- B2MOV R3,#0:STRB R3,[R4],#1:ADR R2,HotKey:B NoHK
- C(.HotKey ]:P%+=128:O%+=128:[OPT pass%
- .WriteC
- LDMFD R13!,{R10,R14}
- STMFD R13!,{R0,R1,R2,R14}
- ADR R1,HotKey:ADD R1,R1,#1
- H4CMP R2,R1:LDMNEFD R13!,{R0,R1,R2,R14}:BNE myjump
- ADR R1,HotKey:MOV R2,#0
- J=.Tlp LDRB R0,[R1],#1:MOVS R0,R0:BEQ ZapY:SWI "XOS_WriteC"
- CMP R0,#9:BNE Tlp
- L$LDRB R0,[R1],#1:SWI "XOS_WriteC"
- M$LDRB R0,[R1],#1:SWI "XOS_WriteC"
- N$LDRB R0,[R1],#1:SWI "XOS_WriteC"
- B Tlp:.ZapY
- PCSTR R0,HotKey:.Womlbe LDMFD R13!,{R0-R2,R14}:MOV R0,#0:B myjump
- Q .NoHK
- LDMFD R13!,{R0-R1,R3-R9}
- STR R2,[R13,#16+60]
- UBMOV R0,#&87:SWI "XOS_Byte":LDMVSFD R13!,{R0-R2,R14}:BVS Normal
- V/LDRB R0,ModeLast:CMP R0,R2:STRB R2,ModeLast
- BEQ Already
- STMFD R13!,{R0-R5}
- BL CalcSize
- Z-LDRB R0,myfonthandle:SWI "XFont_LoseFont"
- adr(1,FontName)
- \%LDR R2,FontXSize:LDR R3,FontYSize
- MOV R4,#0
- MOV R5,#0
- SWI "XFont_FindFont"
- MVNVS R0,#0
- STR R0,myfonthandle
- LDMFD R13!,{R0-R5}
- c'LDMVSFD R13!,{R0-R2,R14}:BVS Normal
- .Already
- LDMFD R13!,{R0-R2,R14}
- f*LDR R0,GreyFlag:MOVS R0,R0:BEQ NotSelI
- R0,R14,#3:CMP R0,#3:BNE NotSelI
- h9TST R14,#256:BEQ NotSelI:TST R14,#(1<<21):BEQ NotSelI
- i"MOV R1,R14,LSR #24:
- R1,R1,#&F
- jFBIC R14,R14,#&FF000000:
- R R14,R14,R1,LSL #24:
- R R14,R14,R1,LSL #28
- STR R14,[R13,#56]
- .NotSelI
- m*SUB R13,R13,#16:LDMFD R13!,{R0-R2,R14}
- .Bonza
- o8LDR R0,[R12,#128]:BIC R0,R0,#3: \\\ MAY BE BUGS HERE
- p5LDR R2,[R0]:LDR R1,Wind:CMP R2,R1:BNE Icon_Filled
- q!TST R14,#&FF000000:BNE NoTBar
- ADD R0,R0,#&48+32
- s,LDRB R1,[R0]:CMP R1,#&FF:BEQ Icon_Filled
- tCLDRB R0,[R0,#1]:
- R R0,R1,R0,LSL #4:
- R R14,R14,R0,LSL #24:B Smeg
- .NoTBar
- v!TST R14,#1<<5:BNE Icon_Filled
- w=ADD R0,R0,#&48+35:LDRB R0,[R0]:CMP R0,#&F:BGT Icon_Filled
- x3BIC R14,R14,#&F<<28:
- R R14,R14,R0,LSL #28:.Smeg
- STR R14,[R13,#56]
- .Icon_Filled
- {*SUB R13,R13,#16:LDMFD R13!,{R0-R2,R14}
- R9,R14,#42:CMP R9,#42:BNE Pj:TST R14,#&200:MOV R9,#0:BNE h
- ; allow radio and text
- *MOV R9,#0:TST R14,#8:MOVNE R9,#8:BNE h
- !TST R14,#&200:MOVNE R9,#16:.h
- F.loop LDRB R0,[R2],#1:CMP R0,#32:ADDCS R1,R1,R9:BCS loop:STR R1,Bo
- OLDR R1,[R13,#56]:LDR R2,[R13,#60]:LDRB R0,myfonthandle:BIC R1,R1,#&FF000000
- R R1,R1,R0,LSL #24
- R R1,R1,#&40:
- bl(&78E8):LDR R1,Bo
- #CMP R9,#8:SUBEQ R1,R1,R4,LSR #1
- CMP R9,#16:SUBEQ R1,R1,R4
- STR R1,Bo
- LDR R1,[R13,#56]
- (MOV R9,R1,LSR #28:STRB R9,[R12,#124]
- R14,R1,#&F000000
- MOVS R14,R14,LSR #24
- CMPEQ R9,#0:
- Q R14,#7
- STRB R14,[R12,#123]
- bl(&7348)
- BVS Normal
- LDMFD R13!,{R0-R12,R14}
- 0MOV R0,#&D4:LDR R1,Bo:SUB R2,R2,#22:B myjump
- .Bo &0
- .Wordx LDRB R14,[R4,#40]
- .Plot
- LDMFD R13!,{R10,R14}
- STMFD R13!,{R0-R12,R14}
- ,BIC R14,R14,#&FC000003:LDR R14,[R14,#16]
- &LDR R7,Wordx:CMP R7,R14:BNE Normal
- -LDR R14,DirOnFlag:MOVS R14,R14:BEQ Normal
- ADR R11,open_dir
- ILDR R14,[R1,#&18]:LDRB R14,[R14,#1]:CMP R14,#
- "s":ADREQ R11,sopen_dir
- CMPNE R14,#
- "d":BNE Normal
- .lebon
- JLDR R0,[R4,#4]:
- adr(7,Moglin):.CopLp LDRB R14,[R0],#1:STRB R14,[R7],#1
- 8CMP R14,#0:BNE CopLp:MOV R14,#
- ".":STRB R14,[R7,#-1]
- FLDR R0,[R1,#&14]:.CopLp LDRB R14,[R0],#1:CMP R14,#0:CMPNE R14,#&0D
- Q R14,#0:STRB R14,[R7],#1
- BNE CopLp
- LDR R0,[R12,#8]
- .RepLp
- >TEQ R0,#&40000001:BEQ Normal:
- adr(7,Moglin):LDR R6,[R0,#4]
- /.SeeIfSame LDRB R5,[R7],#1:LDRB R14,[R6],#1
- CMP R5,#32:
- Q R5,#0
- CMP R14,#32:
- Q R14,#0
- "TEQ R14,#0:TEQEQ R5,#0:BEQ Yes
- (CMP R14,R5:BEQ SeeIfSame:BNE NextOne
- ?LDMIA R1,{R0-R7}:MOV R6,R11:
- adr(14,Brea):STMIA R14,{R0-R7}
- LDMFD R13!,{R0-R12,R14}
- adr(1,Brea):B myjump
- .NextOne LDR R0,[R0]:B RepLp
- ).open_dir EQUS "sdirectoryo"+
- 0:ALIGN
- *.sopen_dir EQUS "ssmall_diro"+
- 0:ALIGN
- &.Trans EQUD 0:EQUD 0:EQUD 0:EQUD 0
- 5.FnameCHO EQUS "<FinalLook$OptionsFile>"+
- 0:ALIGN
- &.Gm EQUS "(Opening file)"+
- 0:ALIGN
- $.Lookup EQUS "(Lookup)"+
- 0:ALIGN
- .DoOptions
- STMFD R13!,{R0-R7,R14}
- GADR R0,Trans:ADR R1,FnameCHO:MOV R2,#0:SWI "XMessageTrans_OpenFile"
- ADRVS R0,Gm:BVS OptTrouble
- !ADR R4,OptList:ADR R8,OptList
- .OptLoop
- ADR R0,Trans
- LDR R1,[R4],#4 ; token
- MOVS R1,R1:BMI OptEnd
- *ADD R1,R1,R8 ; put to absolute address
- ADR R2,Transbuf:MOV R3,#255
- >STMFD R13!,{R4-R7}:MOV R4,#0:MOV R5,#0:MOV R6,#0:MOV R7,#0
- ASWI "XMessageTrans_Lookup":LDMFD R13!,{R4-R7}:ADRVS R0,Lookup
- BVS OptTrouble
- LDR R1,[R4],#4 ; address
- #ADD R1,R1,R8 ; absolute address
- LDR R0,[R4],#4 ; type
- CMP R0,#0:BNE NotBoolean
- 2; A boolean Yes or No ... test by first letter
- 4LDRB R2,[R2]:CMP R2,#
- "a":BLT LetOk:CMP R2,#
- ASUBLE R2,R2,#32:.LetOk CMP R2,#
- "Y":MVNEQ R2,#0:STREQ R2,[R1]
- ?BEQ OptLoop:CMP R2,#
- Q R2,#0:STREQ R2,[R1]:BEQ OptLoop
- STRB R2,Err1+4
- B UnBool
- .NotBoolean
- CMP R0,#1:BNE NotNumeric
- ; A numeric
- 7MOV R7,R1:MOV R1,R2:MOV R0,#0:SWI "OS_ReadUnsigned"
- STR R2,[R7]:B OptLoop
- .NotNumeric
- ; must be text so copy
- >.Flobbadob LDRB R0,[R2],#1:CMP R0,#10:CMPNE R0,#0:
- Q R0,#0
- +STRB R0,[R1],#1:BNE Flobbadob:B OptLoop
- .OptEnd
- -ADR R0,Trans:SWI "MessageTrans_CloseFile"
- ADR R0,Clios:SWI "OS_CLI"
- LDMFD R13!,{R0-R7,PC}^
- .UnBool
- &ADR R0,Err1:SWI "OS_GenerateError"
- LDMFD R13!,{R0-R7,PC}^
- T.Err1 EQUS "!@#$Expecting 'Yes' or 'No' for an option ... cannot start"+
- 0:ALIGN
- .OptTrouble
- FADR R1,Job:.Lop LDRB R2,[R0],#1:STRB R2,[R1],#1:MOVS R2,R2:BNE Lop
- &ADR R0,Err0:SWI "OS_GenerateError"
- LDMFD R13!,{R0-R7,PC}^
- g.Err0 EQUS "!@#$Cannot start !FinalLook as there has been a problem with the options file. - ":.Job
- /;NB a runtime error overwrites from here on
- ALIGN
- .Clios
- EQUS "Set WindowDrop$Path "
- $.TexPathSet EQUS
- 255,"*"):ALIGN
- .OptList
- :EQUD Ptr_FontName-OptList:EQUD FontName-OptList:EQUD 2
- <EQUD Ptr_FontXSize-OptList:EQUD FontXSize-OptList:EQUD 1
- <EQUD Ptr_FontYSize-OptList:EQUD FontYSize-OptList:EQUD 1
- ;EQUD Ptr_TexPath-OptList:EQUD TexPathSet-OptList:EQUD 2
- 8EQUD Ptr_TexOn-OptList:EQUD TexOnFlag-OptList:EQUD 0
- :EQUD Ptr_FontOn-OptList:EQUD FontOnFlag-OptList:EQUD 0
- :EQUD Ptr_DirOpen-OptList:EQUD DirOnFlag-OptList:EQUD 0
- 6EQUD Ptr_Grey-OptList:EQUD GreyFlag-OptList:EQUD 0
- EQUD -1
- 3.Ptr_FontName EQUS "FontName:Corpus.Medium"+
- *.Ptr_FontXSize EQUS "FontXSize:170"+
- *.Ptr_FontYSize EQUS "FontYSize:248"+
- J.Ptr_TexPath EQUS "TexturePath:<FinalLook$Dir>.WindowDrop.Default."+
- &.Ptr_TexOn EQUS "TexturesOn:No"+
- $.Ptr_FontOn EQUS "FontsOn:No"+
- +.Ptr_DirOpen EQUS "DirectoryOpen:No"+
- *.Ptr_Grey EQUS "RemoveGreyBlobs:No"+
- ALIGN
- *.Transbuf ]:P%+=256:O%+=256:[OPT pass%
- $.Brea ]:P%+=64:O%+=64:[OPT pass%
- .Moglin
- ]P%+=1024:O%+=1024
- "OS_File",10,"<FinalLook$Dir>.AllPatch",&FFA,,code%,O%
- pass%=4
- P%=&8000:O%=code%
- [OPT pass%
- .Alt_Key
- STMFD R13!,{R0-R7,R14}
- 8MOV R0,#129:MOV R1,#256-3:MOV R2,#255:SWI "XOS_Byte"
- BVS End
- (CMP R2,#255:ADREQ R0,On:ADRNE R0,Off
- SWI "XOS_CLI"
- LDMFD R13!,{R0-R7,PC}^
- ).On EQUS "Set FinalLook$AltKey On"+
- 1.Off EQUS "Set FinalLook$AltKey Off"+
- 0:ALIGN
- "OS_File",10,"<FinalLook$Dir>.AltCheck",&FFC,,code%,O%
- bl(addr)
- [OPT pass%
- ADR R14,P%+16
- R R14,R14,#3
- LDR PC,P%+4
- EQUD WimpMod+addr
- Filer_bl(addr)
- [OPT pass%
- ADR R14,P%+16
- R R14,R14,#3
- LDR PC,P%+4
- EQUD FilerMod+addr
- adr(reg,addr)
- [OPT pass%
- LDR reg,P%+12
- ADD reg,pc,reg
- B P%+8
- EQUD addr-P%
-